1
Melampaui Perangkap NULL
AI013Lesson 2
00:00

Perpindahan dari makro gaya C ke literatur aman tipe C++ mewakili perubahan mendasar dalam kenyamanan penggunaan bahasa, menyelesaikan perangkap "NULL" di mana ambiguitas makro nol menyebabkan kesalahan logika yang diam-diam terjadi.

1. Kegagalan Resolusi Saling Timpang

Pada standar lama (C++98), NULL sering didefinisikan sebagai 0. Saat dilewatkan ke fungsi yang memiliki banyak versi, kompiler mengenali NULL sebagai bilangan bulat. Hal ini dibuktikan oleh:

if (std::is_same<decltype(NULL), decltype(0)>::value)
std::cout << "NULL adalah int";

2. Solusi nullptr

C++11 memperkenalkan nullptr, sebuah kata kunci dengan tipe std::nullptr_t. Berbeda dengan makro, ia tidak dapat dikonversi secara implisit ke tipe bilangan bulat (kecuali bool), memastikan overload khusus pointer dipilih.

Perangkap Kunofoo(NULL)Memanggil foo(int)Solusi Modernfoo(nullptr)Memanggil foo(char*)

3. Keterhubungan & Interoperabilitas

C++ modern membutuhkan extern "C" untuk mencegah pengacakan nama saat menghubungkan dengan kode C (misalnya, dikompilasi dengan gcc). Menjaga pointer aman tipe pada batas ini sangat penting.

$$\text{std::nullptr\_t} \neq \text{int}$$

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>